home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / sun4.md / z8530.h < prev   
C/C++ Source or Header  |  1992-12-18  |  9KB  |  401 lines

  1. /*
  2.  * z8530.h --
  3.  *
  4.  *     Types, constants, and macros for the Zilog 8530 SCC chip.
  5.  *
  6.  *     The constants that define the bit patterns for each register are
  7.  *     not explained in this file.  For an explanation of the use of the 
  8.  *     chip and the actual explanation of the meaning of the constants see 
  9.  *     the "Z8030/Z8530 SCC Serial Communication Controller Technical Manual" 
  10.  *     January 1983 edition.
  11.  *
  12.  * Copyright 1989 Regents of the University of California
  13.  * Permission to use, copy, modify, and distribute this
  14.  * software and its documentation for any purpose and without
  15.  * fee is hereby granted, provided that the above copyright
  16.  * notice appear in all copies.  The University of California
  17.  * makes no representations about the suitability of this
  18.  * software for any purpose.  It is provided "as is" without
  19.  * express or implied warranty.
  20.  *
  21.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dev/sun4.md/z8530.h,v 9.3 91/09/10 18:20:40 rab Exp $ SPRITE (Berkeley)
  22.  */
  23.  
  24. #ifndef _DEVZ8530
  25. #define _DEVZ8530
  26.  
  27. #ifndef _DEVTTY
  28. #include "tty.h"
  29. #endif
  30.  
  31. /*
  32.  *-------------------------------------------------------------------------
  33.  *
  34.  * Read only registers
  35.  *
  36.  *-------------------------------------------------------------------------
  37.  */
  38.  
  39. /*
  40.  * Bits in read register 0.
  41.  *
  42.  * (See page 4-16)
  43.  */
  44.  
  45. #define    READ0_RX_READY        0x01    
  46. #define READ0_TIMER_ZERO    0x02
  47. #define    READ0_TX_READY        0x04
  48. #define    READ0_DCD        0x08
  49. #define READ0_SYNC        0x10
  50. #define    READ0_CTS        0x20
  51. #define READ0_TX_UNDERRUN    0x40
  52. #define    READ0_BREAK        0x80
  53.  
  54. /* 
  55.  * Bits in read register 1.
  56.  *
  57.  * (See page 4-18)
  58.  */
  59.  
  60. #define    READ1_ALL_SENT        0x01    
  61. #define    READ1_PARITY_ERROR    0x10
  62. #define    READ1_RX_OVERRUN    0x20
  63. #define    READ1_FRAMING_ERROR    0x40
  64.  
  65. /* 
  66.  * Bits in read register 3.
  67.  *
  68.  * Interrupt pending (IP)  register.  This register can only be read in 
  69.  * channel A.
  70.  *
  71.  * (See page 4-18)
  72.  */
  73.  
  74. #define READ3_STAT_IP_B        0x01    
  75. #define READ3_TX_IP_B        0x02
  76. #define READ3_RX_IP_B        0x04
  77. #define READ3_STAT_IP_A        0x08
  78. #define READ3_TX_IP_A        0x10
  79. #define READ3_RX_IP_A        0x20
  80.  
  81. /* 
  82.  * Bits in read register 8.
  83.  *
  84.  * This is the receive data register.
  85.  *
  86.  * (See page 4-19)
  87.  */
  88.  
  89.  
  90. /* 
  91.  * Bits in read register 10.
  92.  * 
  93.  * This register is for DPLL and SDLC loop mode status.  Since these modes are
  94.  * not entered, no constants entered here.
  95.  *
  96.  * (See page 4-19)
  97.  */
  98.  
  99.  
  100. /*
  101.  *----------------------------------------------------------------------------
  102.  * 
  103.  * Read/write registers
  104.  *
  105.  *----------------------------------------------------------------------------
  106.  */
  107.  
  108. /* 
  109.  * Bits in read/write register 2.  
  110.  *
  111.  * Interrupt vector
  112.  *
  113.  * (See page 4-4 and 4-19)
  114.  */
  115.  
  116. /* 
  117.  * Bits in read/write register 12.
  118.  *
  119.  * Lower byte of baud rate constant.
  120.  *
  121.  * (See page 4-13 and 4-20)
  122.  */
  123.  
  124. /* 
  125.  * Bits in read/write register 13.
  126.  *
  127.  * Upper byte of baud rate constant.
  128.  *
  129.  * (See page 4-13 and 4-20)
  130.  */
  131.  
  132. /*
  133.  * Bits in read/write register 15
  134.  *
  135.  * (See page 4-15 and 4-20)
  136.  */
  137.  
  138. #define READWRITE15_TIMER_IE        0x02
  139. #define READWRITE15_DCD_IE        0x08
  140. #define READWRITE15_SYNC_IE        0x10
  141. #define READWRITE15_CTS_IE        0x20
  142. #define READWRITE15_TX_UNDERRUN_IE    0x40
  143. #define READWRITE15_BREAK_IE        0x80
  144.  
  145. /*
  146.  *---------------------------------------------------------------------------
  147.  *
  148.  * Write-only registers
  149.  *
  150.  *---------------------------------------------------------------------------
  151.  */
  152.  
  153. /* 
  154.  * Bits for write register 0 
  155.  *
  156.  * (See page 4-1)
  157.  */
  158.  
  159. #define WRITE0_REG        0x0F    
  160. #define    WRITE0_RESET_STATUS    0x10
  161. #define WRITE0_NEXT_RX_IE    0x20
  162. #define    WRITE0_RESET_TX_INT    0x28
  163. #define    WRITE0_RESET_ERRORS    0x30
  164. #define    WRITE0_CLEAR_INTR    0x38
  165.  
  166. /* 
  167.  * Bits for write register 1 
  168.  *
  169.  * (See page 4-3)
  170.  */
  171.  
  172. #define    WRITE1_EXT_IE            0x01
  173. #define    WRITE1_TX_IE            0x02
  174. #define    WRITE1_PARITY_SPECIAL_IE    0x04    
  175. #define WRITE1_FIRST_RX_IE        0x08
  176. #define    WRITE1_RX_IE            0x10
  177.  
  178. /* 
  179.  * Bits for write register 3 
  180.  *
  181.  * (See page 4-4)
  182.  */
  183.  
  184. #define    WRITE3_RX_ENABLE    0x01    
  185. #define    WRITE3_AUTO_CD_CTS    0x20
  186. #define WRITE3_RX_5BIT        0x00
  187. #define    WRITE3_RX_6BIT        0x80
  188. #define    WRITE3_RX_7BIT        0x40
  189. #define    WRITE3_RX_8BIT        0xC0
  190.  
  191. /* 
  192.  * Bits for write register 4 
  193.  *
  194.  * (See page 4-6)
  195.  */
  196.  
  197. #define    WRITE4_PARITY_ENABLE    0x01    
  198. #define    WRITE4_PARITY_EVEN    0x02
  199. #define    WRITE4_1_STOP        0x04
  200. #define    WRITE4_1_5_STOP        0x08
  201. #define    WRITE4_2_STOP        0x0C
  202. #define WRITE4_X1_CLK        0x00
  203. #define    WRITE4_X16_CLK        0x40
  204. #define WRITE4_X32_CLK        0x80
  205. #define WRITE4_X64_CLK        0xC0
  206.  
  207. /* 
  208.  * Bits for write register 5 
  209.  *
  210.  * (See page 4-7)
  211.  */
  212.  
  213. #define    WRITE5_RTS        0x02
  214. #define    WRITE5_TX_ENABLE    0x08
  215. #define    WRITE5_BREAK        0x10
  216. #define    WRITE5_TX_5BIT        0x00
  217. #define    WRITE5_TX_6BIT        0x40
  218. #define    WRITE5_TX_7BIT        0x20
  219. #define    WRITE5_TX_8BIT        0x60
  220. #define    WRITE5_DTR        0x80
  221.  
  222. /* 
  223.  * Bits for write register 6 
  224.  *
  225.  * Synch characters or SDLC address field.
  226.  *
  227.  * (See page 4-8)
  228.  */
  229.  
  230. /* 
  231.  * Bits for write register 7 
  232.  *
  233.  * Sync character or SDLC flag.
  234.  *
  235.  * (See page 4-8)
  236.  */
  237.  
  238. /* 
  239.  * Bits for write register 8 
  240.  *
  241.  * Transmit buffer.
  242.  *
  243.  * (See page 4-9)
  244.  */
  245.  
  246. /* 
  247.  * Bits for write register 9 
  248.  *
  249.  * Master interrupt control.
  250.  *
  251.  * (See page 4-9)
  252.  */
  253.  
  254. #define WRITE9_VECTOR_INCL_STAT    0x01    
  255. #define WRITE9_NO_VECTOR    0x02
  256. #define WRITE9_DIS_LOWER_CHAIN    0x04
  257. #define WRITE9_MASTER_IE    0x08
  258. #define WRITE9_STAT_HIGH    0x10
  259. #define WRITE9_RESET_CHAN_B    0x40
  260. #define WRITE9_RESET_CHAN_A    0x80
  261. #define WRITE9_RESET_WORLD    0xC0
  262.  
  263. /* 
  264.  * Bits for write register 10 
  265.  *
  266.  * Miscellaneous transmitter/receiver control bits.
  267.  *
  268.  * (See page 4-10)
  269.  */
  270.  
  271. /* 
  272.  * Bits for write register 11 
  273.  *
  274.  * (See page 4-11 - 4-13)
  275.  */
  276.  
  277. #define WRITE11_TRXC_XTAL    0x00    
  278. #define WRITE11_TRXC_XMIT    0x01
  279. #define WRITE11_TRXC_BAUD    0x02
  280. #define WRITE11_TRXC_DPLL    0x03
  281. #define WRITE11_TRXC_OUT_ENA    0x04
  282. #define WRITE11_TXCLK_RTXC    0x00
  283. #define WRITE11_TXCLK_TRXC    0x08
  284. #define WRITE11_TXCLK_BAUD    0x10
  285. #define WRITE11_TXCLK_DPLL    0x18
  286. #define WRITE11_RXCLK_RTXC    0x00
  287. #define WRITE11_RXCLK_TRXC    0x20
  288. #define WRITE11_RXCLK_BAUD    0x40
  289. #define WRITE11_RXCLK_DPLL    0x60
  290. #define WRITE11_RTXC_XTAL    0x80
  291.  
  292. /* bits in WR14 -- misc control bits, and DPLL control */
  293. #define WRITE14_BAUD_ENABLE    0x01
  294. #define WRITE14_BAUD_FROM_PCLK    0x02
  295. #define WRITE14_DTR_IS_REQUEST    0x04
  296. #define WRITE14_AUTO_ECHO    0x08
  297. #define WRITE14_LOCAL_LOOPBACK    0x10
  298. #define WRITE14_DPLL_NOP    0x00
  299. #define WRITE14_DPLL_SEARCH    0x20
  300. #define WRITE14_DPLL_RESET    0x40
  301. #define WRITE14_DPLL_DISABLE    0x60
  302. #define WRITE14_DPLL_SRC_BAUD    0x80
  303. #define WRITE14_DPLL_SRC_RTXC    0xA0
  304. #define WRITE14_DPLL_FM        0xC0
  305. #define WRITE14_DPLL_NRZI    0xE0
  306.  
  307.  
  308. /*
  309.  *-------------------------------------------------------------------
  310.  * 
  311.  * Zilog device struct used to access read register 0.
  312.  *
  313.  *-------------------------------------------------------------------
  314.  */
  315.  
  316.  
  317. typedef struct {
  318.     unsigned char    control;
  319.     unsigned char    :8;        
  320.     unsigned char    data;
  321.     unsigned char    :8;    
  322. } DevZ8530Device;
  323.  
  324. /*
  325.  * The following macro can be used to generate the baud rate generator's
  326.  * time constants.  The parameters are the input clock to the baud rate
  327.  * generator (eg, 5000000 for 5MHz) and the desired baud rate.  This 
  328.  * macro assumes that the clock needed is 16 times the desired baud rate.
  329.  */
  330.  
  331. #define ZilogTimeConst(inputClock, baudRate) (( inputClock / (2*baudRate*16)) - 2)
  332.  
  333. #define    PCLK        (19660800/4)
  334. #define    ZILOG_SPEED(n)    ZilogTimeConst(PCLK, n)
  335.  
  336. /*
  337.  *-----------------------------------------------------------------
  338.  *
  339.  * For each channel of a Z8530 chip there is one structure of the
  340.  * following form, which provides information about the channel.
  341.  *
  342.  *-----------------------------------------------------------------
  343.  */
  344.  
  345. typedef struct {
  346.     char *name;                /* Name to use for device in console
  347.                      * error messages. */
  348.     DevZ8530Device *address;        /* Address of device registers for
  349.                      * this channel. */
  350.     DevTty *ttyPtr;            /* Information about the logical
  351.                      * terminal associated with the line. */
  352.     int vector;                /* Interrupt vector to use for the
  353.                      * channel. */
  354.     int baud;                /* Current baud rate for channel
  355.                      * (9600 means 9600 baud). */
  356.     int wr3;                /* Value for write register 3
  357.                      * (receiver characteristics). */
  358.     int wr5;                /* Value for write register 5
  359.                      * (transmitter characteristics). */
  360.     void (*inputProc)();        /* Procedure to call at interrupt time
  361.                      * to take input character.   See
  362.                      * DevTtyInputChar for example of
  363.                      * inputProc's structure. */
  364.     ClientData inputData;        /* Argument to pass to inputProc. */
  365.     int (*outputProc)();        /* Procedure to call at interrupt time
  366.                      * to get next output character.   See
  367.                      * DevTtyOutputChar for example of
  368.                      * outputProc's calling structure. */
  369.     ClientData outputData;        /* Argument to pass to outputProc. */
  370.     int oldRr0;                /* Previous value of read reg. 0;  used
  371.                      * to detect changes in status bits. */
  372.     int flags;                /* See below for definitions. */
  373. } DevZ8530;
  374.  
  375. /*
  376.  * Flag values for DevZ8530 structures:
  377.  *
  378.  * Z_CHANNEL_B:                1 means channel B, 0 means A.
  379.  * Z_BREAK:                1 means break condition has been
  380.  *                    detected but not yet cleared.
  381.  * Z_INACTIVE:                1 means device is not in use, so don't
  382.  *                    ignore it.
  383.  */
  384.  
  385. #define Z_CHANNEL_A        0
  386. #define Z_CHANNEL_B        1
  387. #define Z_BREAK            2
  388. #define Z_INACTIVE        4
  389.  
  390. /*
  391.  * Exported procedures:
  392.  */
  393.  
  394. extern void        DevZ8530Activate _ARGS_ ((Address ptr));
  395. extern Boolean        DevZ8530Interrupt _ARGS_ ((ClientData    clientData));
  396. extern int        DevZ8530RawProc _ARGS_ ((Address ptr, int operation, 
  397.                 int inBufSize, char *inBuffer, int outBufSize,
  398.                 char *outBuffer));
  399.  
  400. #endif /* _DEVZ8530 */
  401.